使用OpenGL ES在iOS平台上画三角形
演示在iOS平台上,使用OpenGL ES 3.0绘制一个三角形
流程
准备渲染环境:
编写Shader
准备数据:
开始绘制
释放内存
一、准备渲染环境
1.引入OpenGL ES框架
#import <OpenGLES/ES3/gl.h>
2.准备绘图的Layer
新建一个视图类所有的绘制都在内部完成,指定它的Layer为CAEAGLLayer,只有此类型的Layer才支持OpenGL ES的绘制1
2
3+ (Class)layerClass {
return [CAEAGLLayer class];
}
配置Layer属性1
2
3
4
5
6
7
8
9
10
11
12
13
14CAEAGLLayer *glLayer = (CAEAGLLayer *)self.layer;
NSDictionary *drawableProperties = @{
kEAGLDrawablePropertyRetainedBacking: @(NO),
kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8
};
/**
* kEAGLDrawablePropertyRetainedBacking:不维持渲染内容
* kEAGLDrawablePropertyColorFormat:颜色缓冲格式 32-bit RGBA格式
*/
glLayer.drawableProperties = drawableProperties;
glLayer.contentsScale = [UIScreen mainScreen].scale;
//Layer默认是透明的 设置为不透明内容才可见
glLayer.opaque = YES;
3.准备绘制上下文环境
1 | - (void)setUpContext { |
4.准备渲染缓存空间
1 | //申请颜色渲染缓存空间 |
二、编写Shader
1.编写顶点着色器
1 | attribute vec3 a_Position; //顶点坐标属性 |
2.编写片元着色器
1 | varying highp vec4 v_Color; //接收传递过来的颜色值 |
3.加载着色器
1 | - (GLuint)loadShaderCode:(NSString *)fileName shaderType:(GLenum)type { |
4.编译着色器
1 | - (BOOL)compilingShaderWithShaderIdentifier:(GLuint)shaderId { |
5.链接着色器
1 | - (void)createProgram:(GLuint)vertexShader fragmentShader:(GLuint)fragmentShader { |
三、准备数据
1.坐标
OpenGL ES坐标系:
OpenGL ES坐标系是一个三维坐标系{x,y,z},三维坐标中心在正方体的几何中心{0,0,0}
整个坐标系是[0,1]的点,也就是说OpenGL中只支持0~1的点
2.生成顶点数据
1 | GLfloat vertexs[] = { |
上面数据定义了三个顶点数据,每个顶点数据包含坐标和顶点颜色.
3.生成顶点缓存对象
1 | //生成一个顶点缓存对象 |
4.定义顶点解析配置
1 | const GLuint positionAttributeIndex = 0; |
四、开始绘制
1.开始绘制
1 | //开始绘制 |
2.将绘制内容展现到屏幕上
1 | //将渲染缓存区的内容显示到屏幕上 |
五、释放内存
1 | //渲染完成释放内存 |